package de.dhbw.mannheim.wi.projektarbeit;

import java.util.ArrayList;

/**
 * Diese Klasse ist der Einstiegspunkt des Programms und enthält die main()-Methode. Die Klasse sorgt für das Einlesen der Datendateien und 
 * die Ausgabe des Inhalts dieser Dateien.
 * 
 * @author Johann Meister
 * @version 2.0 20110608
 */
public class DHBW {
	
	private static ArrayList<Student> studentenListe;
	
	/**
	 * Die Methode nimmt die Dateinamen entgegen, öffnet diese Dateien, liest sie Zeile für Zeile aus und gibt das Ergebnis
	 * in der Konsole aus.
	 * 
	 * @param args Ein String[] das beim Start des Programs erzeugt wird und die Dateinamen enthält.
	 */
	public static void main(String[] args) {
		String studDat = args[0]; //Dateiname der Datei mit Studierenden "studenten.csv"
		String betreuerDat = args[1]; //Dateiname der Datei mit wissenschaftl. Betreuern
		
		studentenErzeugen(studDat);
		studentenAusgeben();
		studentenNameAendern(7);
		studentenAusgeben();
	}
	/**
	 * Liest die Datei mit den Studenten-Daten ein und erstellt pro Student ein Objekt und weist diesem die Werte aus der Datei zu.
	 * 
	 * @param studDat String, der den Dateinamen der Studentendatei enthält.
	 */
	public static void studentenErzeugen(String studDat) {
		studentenListe = new ArrayList<Student>(); //erstellen einer ArrayListe, die Studenten-Objekte aufnehmen kann
		Datei studenten = new Datei(); //neues Datei-Objekt erstellen
		studenten.dateiEinlesen(studDat); //Datei einlesen

		while (studenten.isEof() == false) { //solange eof == false
			Student neuerStudent = new Student(); //neues Studenten-Objekt erzeugen
			studentenListe.add(neuerStudent); //Student "in ArrayList packen", also eine Referenz auf das Studenten-Objekt in die ArrayList schreiben
			String zeile = studenten.zeileLesen(); //eine Zeile der Datei einlesen
			
			if (studenten.isEof() == false) { //wenn eof == false
				String[] teilzeile = zeile.split(";"); //bei jedem ; wird die Zeile geteilt und die einzelnen Teile in ein String[] geschrieben
				for (int i=0; i < teilzeile.length; i++) { //durchlaufe das String[]
					switch (i) {
						case 0: studentenListe.get(studentenListe.size()-1).setMatrikelNr(Integer.parseInt(teilzeile[i])); break; //Matrikel Nummer des aktuellen/letzten Studenten in der ArrayList schreiben
						case 1: studentenListe.get(studentenListe.size()-1).setVorname(teilzeile[i]); break; //Vorname des aktuellen/letzten Studenten in der ArrayList schreiben
						case 2: studentenListe.get(studentenListe.size()-1).setName(teilzeile[i]); break; //Nachname des aktuellen/letzten Studenten in der ArrayList schreiben
					}
				}
			}
		}
		System.out.println(); //nochmaliger Zeilenvorschub um Leerzeile zwischen Studierenden und Betreuern zu schaffen
	}
	
	/**
	 * Gibt die Daten der Studenten-Objekte aus.
	 */
	public static void studentenAusgeben() {
		for (int i=0; i < studentenListe.size()-1; i++) {
			System.out.println(studentenListe.get(i).getMatrikelNr()); //Zurückgeben der Matrikel Nummer und ausgeben der solchen in der Konsole.
			System.out.println(studentenListe.get(i).getName()); //Zurückgeben des Nachnamen und ausgeben des solchen in der Konsole.
			System.out.println(studentenListe.get(i).getVorname()); //Zurückgeben des Namen und ausgeben des solchen in der Konsole.
			System.out.println("");
		}
	}
	
	/**
	 * Ändert den Nachnamen eines Studenten.
	 * 
	 * @param studentenNummer Index des Studenten in der ArrayList als int.
	 */
	public static void studentenNameAendern(int studentenNummer) {
		studentenListe.get(studentenNummer).setName("Meister"); //ändern des Namens des Studenten
	}
}
